package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;

import clases.Premio;
import clases.Ranura;
import clases.Transaccion;
import clases.casillas.Casilla;
import controlador.Tragamonedas;

public class AdministradorTragamonedas
{	
	private static AdministradorTragamonedas instancia;
	
	private AdministradorTragamonedas()
	{
		
	}
	
	public static AdministradorTragamonedas getInstancia()
	{
		if (instancia == null)
			instancia = new AdministradorTragamonedas();
		return instancia;
	}


	public Tragamonedas traer() {
		Tragamonedas tragamonedas = null;
		try
		{
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("select credito, recaudacion, recaudacionMinima, precioJugada from Tragamonedas");
			
			ResultSet rs = s.executeQuery();
			if (rs.next()) {
				float credito = rs.getFloat("credito");
				float recaudacion = rs.getFloat("recaudacion");
				float recaudacionMinima = rs.getFloat("recaudacionMinima");
				float precioJugada = rs.getFloat("precioJugada");
				
				Vector<Transaccion> transacciones = AdministradorTransacciones.getInstancia().traerTodas();
				Vector<Casilla> casillas = AdministradorCasilla.getInstancia().traerTodas();
				Vector<Ranura> ranuras = AdministradorRanuras.getInstancia().traerTodas();
				Vector<Premio> premios = AdministradorPremios.getInstancia().traerTodos();
				
				tragamonedas = new Tragamonedas(
						recaudacion,
						recaudacionMinima,
						precioJugada,
						credito,
						casillas,
						ranuras,
						premios,
						transacciones);
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch (Exception e)
		{
			System.out.println();
		}
		return tragamonedas;
	}
	
	public void insertar(Tragamonedas tragamonedas) {
		Connection con = null;
		try
		{
			con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("insert into Tragamonedas (recaudacion, recaudacionMinima, precioJugada, credito) VALUES (?, ?, ?, ?)");
			
			s.setFloat(1, tragamonedas.getRecaudacion());
			s.setFloat(2, tragamonedas.getRecaudacionMinima());
			s.setFloat(3, tragamonedas.getPrecioJugada());
			s.setFloat(4, tragamonedas.getCredito());
			
			s.execute();
		}
		catch (Exception e)
		{
			System.out.println();
		}
		finally {
			if (con != null)
				PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	}
	
	public void actualizar(Tragamonedas tragamonedas) {
		Connection con = null;
		try
		{
			con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("update Tragamonedas set recaudacion = ?, recaudacionMinima = ? , precioJugada = ?, credito = ?");
			
			s.setFloat(1, tragamonedas.getRecaudacion());
			s.setFloat(2, tragamonedas.getRecaudacionMinima());
			s.setFloat(3, tragamonedas.getPrecioJugada());
			s.setFloat(4, tragamonedas.getCredito());
			
			s.execute();
		}
		catch (Exception e)
		{
			System.out.println();
		}
		finally {
			if (con != null)
				PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	}
	
	/*public void actualizarCredito(float credito) {
		Connection con = null;
		try
		{
			con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("update Tragamonedas set credito = ?");
			s.setFloat(1, credito);
			s.execute();
		}
		catch (Exception e)
		{
			System.out.println();
		}
		finally {
			if (con != null)
				PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	}*/
}
